//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2021 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto/tree/main/CodeGenerator. DO NOT EDIT.

import Foundation
import SotoCore

extension NetworkManager {
    // MARK: Enums

    public enum ConnectionState: String, CustomStringConvertible, Codable {
        case available = "AVAILABLE"
        case deleting = "DELETING"
        case pending = "PENDING"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum CustomerGatewayAssociationState: String, CustomStringConvertible, Codable {
        case available = "AVAILABLE"
        case deleted = "DELETED"
        case deleting = "DELETING"
        case pending = "PENDING"
        public var description: String { return self.rawValue }
    }

    public enum DeviceState: String, CustomStringConvertible, Codable {
        case available = "AVAILABLE"
        case deleting = "DELETING"
        case pending = "PENDING"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum GlobalNetworkState: String, CustomStringConvertible, Codable {
        case available = "AVAILABLE"
        case deleting = "DELETING"
        case pending = "PENDING"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum LinkAssociationState: String, CustomStringConvertible, Codable {
        case available = "AVAILABLE"
        case deleted = "DELETED"
        case deleting = "DELETING"
        case pending = "PENDING"
        public var description: String { return self.rawValue }
    }

    public enum LinkState: String, CustomStringConvertible, Codable {
        case available = "AVAILABLE"
        case deleting = "DELETING"
        case pending = "PENDING"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum SiteState: String, CustomStringConvertible, Codable {
        case available = "AVAILABLE"
        case deleting = "DELETING"
        case pending = "PENDING"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum TransitGatewayConnectPeerAssociationState: String, CustomStringConvertible, Codable {
        case available = "AVAILABLE"
        case deleted = "DELETED"
        case deleting = "DELETING"
        case pending = "PENDING"
        public var description: String { return self.rawValue }
    }

    public enum TransitGatewayRegistrationState: String, CustomStringConvertible, Codable {
        case available = "AVAILABLE"
        case deleted = "DELETED"
        case deleting = "DELETING"
        case failed = "FAILED"
        case pending = "PENDING"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct AWSLocation: AWSEncodableShape & AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the subnet the device is located in.
        public let subnetArn: String?
        /// The Zone the device is located in. This can be the ID of an Availability Zone, Local Zone, Wavelength Zone, or an Outpost.
        public let zone: String?

        public init(subnetArn: String? = nil, zone: String? = nil) {
            self.subnetArn = subnetArn
            self.zone = zone
        }

        private enum CodingKeys: String, CodingKey {
            case subnetArn = "SubnetArn"
            case zone = "Zone"
        }
    }

    public struct AssociateCustomerGatewayRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// The Amazon Resource Name (ARN) of the customer gateway. For more information, see Resources Defined by Amazon EC2.
        public let customerGatewayArn: String
        /// The ID of the device.
        public let deviceId: String
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The ID of the link.
        public let linkId: String?

        public init(customerGatewayArn: String, deviceId: String, globalNetworkId: String, linkId: String? = nil) {
            self.customerGatewayArn = customerGatewayArn
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
            self.linkId = linkId
        }

        private enum CodingKeys: String, CodingKey {
            case customerGatewayArn = "CustomerGatewayArn"
            case deviceId = "DeviceId"
            case linkId = "LinkId"
        }
    }

    public struct AssociateCustomerGatewayResponse: AWSDecodableShape {
        /// The customer gateway association.
        public let customerGatewayAssociation: CustomerGatewayAssociation?

        public init(customerGatewayAssociation: CustomerGatewayAssociation? = nil) {
            self.customerGatewayAssociation = customerGatewayAssociation
        }

        private enum CodingKeys: String, CodingKey {
            case customerGatewayAssociation = "CustomerGatewayAssociation"
        }
    }

    public struct AssociateLinkRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// The ID of the device.
        public let deviceId: String
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The ID of the link.
        public let linkId: String

        public init(deviceId: String, globalNetworkId: String, linkId: String) {
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
            self.linkId = linkId
        }

        private enum CodingKeys: String, CodingKey {
            case deviceId = "DeviceId"
            case linkId = "LinkId"
        }
    }

    public struct AssociateLinkResponse: AWSDecodableShape {
        /// The link association.
        public let linkAssociation: LinkAssociation?

        public init(linkAssociation: LinkAssociation? = nil) {
            self.linkAssociation = linkAssociation
        }

        private enum CodingKeys: String, CodingKey {
            case linkAssociation = "LinkAssociation"
        }
    }

    public struct AssociateTransitGatewayConnectPeerRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// The ID of the device.
        public let deviceId: String
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The ID of the link.
        public let linkId: String?
        /// The Amazon Resource Name (ARN) of the Connect peer.
        public let transitGatewayConnectPeerArn: String

        public init(deviceId: String, globalNetworkId: String, linkId: String? = nil, transitGatewayConnectPeerArn: String) {
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
            self.linkId = linkId
            self.transitGatewayConnectPeerArn = transitGatewayConnectPeerArn
        }

        private enum CodingKeys: String, CodingKey {
            case deviceId = "DeviceId"
            case linkId = "LinkId"
            case transitGatewayConnectPeerArn = "TransitGatewayConnectPeerArn"
        }
    }

    public struct AssociateTransitGatewayConnectPeerResponse: AWSDecodableShape {
        /// The transit gateway Connect peer association.
        public let transitGatewayConnectPeerAssociation: TransitGatewayConnectPeerAssociation?

        public init(transitGatewayConnectPeerAssociation: TransitGatewayConnectPeerAssociation? = nil) {
            self.transitGatewayConnectPeerAssociation = transitGatewayConnectPeerAssociation
        }

        private enum CodingKeys: String, CodingKey {
            case transitGatewayConnectPeerAssociation = "TransitGatewayConnectPeerAssociation"
        }
    }

    public struct Bandwidth: AWSEncodableShape & AWSDecodableShape {
        /// Download speed in Mbps.
        public let downloadSpeed: Int?
        /// Upload speed in Mbps.
        public let uploadSpeed: Int?

        public init(downloadSpeed: Int? = nil, uploadSpeed: Int? = nil) {
            self.downloadSpeed = downloadSpeed
            self.uploadSpeed = uploadSpeed
        }

        private enum CodingKeys: String, CodingKey {
            case downloadSpeed = "DownloadSpeed"
            case uploadSpeed = "UploadSpeed"
        }
    }

    public struct Connection: AWSDecodableShape {
        /// The ID of the second device in the connection.
        public let connectedDeviceId: String?
        /// The ID of the link for the second device in the connection.
        public let connectedLinkId: String?
        /// The Amazon Resource Name (ARN) of the connection.
        public let connectionArn: String?
        /// The ID of the connection.
        public let connectionId: String?
        /// The date and time that the connection was created.
        public let createdAt: Date?
        /// The description of the connection.
        public let description: String?
        /// The ID of the first device in the connection.
        public let deviceId: String?
        /// The ID of the global network.
        public let globalNetworkId: String?
        /// The ID of the link for the first device in the connection.
        public let linkId: String?
        /// The state of the connection.
        public let state: ConnectionState?
        /// The tags for the connection.
        public let tags: [Tag]?

        public init(connectedDeviceId: String? = nil, connectedLinkId: String? = nil, connectionArn: String? = nil, connectionId: String? = nil, createdAt: Date? = nil, description: String? = nil, deviceId: String? = nil, globalNetworkId: String? = nil, linkId: String? = nil, state: ConnectionState? = nil, tags: [Tag]? = nil) {
            self.connectedDeviceId = connectedDeviceId
            self.connectedLinkId = connectedLinkId
            self.connectionArn = connectionArn
            self.connectionId = connectionId
            self.createdAt = createdAt
            self.description = description
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
            self.linkId = linkId
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case connectedDeviceId = "ConnectedDeviceId"
            case connectedLinkId = "ConnectedLinkId"
            case connectionArn = "ConnectionArn"
            case connectionId = "ConnectionId"
            case createdAt = "CreatedAt"
            case description = "Description"
            case deviceId = "DeviceId"
            case globalNetworkId = "GlobalNetworkId"
            case linkId = "LinkId"
            case state = "State"
            case tags = "Tags"
        }
    }

    public struct CreateConnectionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// The ID of the second device in the connection.
        public let connectedDeviceId: String
        /// The ID of the link for the second device.
        public let connectedLinkId: String?
        /// A description of the connection. Length Constraints: Maximum length of 256 characters.
        public let description: String?
        /// The ID of the first device in the connection.
        public let deviceId: String
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The ID of the link for the first device.
        public let linkId: String?
        /// The tags to apply to the resource during creation.
        public let tags: [Tag]?

        public init(connectedDeviceId: String, connectedLinkId: String? = nil, description: String? = nil, deviceId: String, globalNetworkId: String, linkId: String? = nil, tags: [Tag]? = nil) {
            self.connectedDeviceId = connectedDeviceId
            self.connectedLinkId = connectedLinkId
            self.description = description
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
            self.linkId = linkId
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case connectedDeviceId = "ConnectedDeviceId"
            case connectedLinkId = "ConnectedLinkId"
            case description = "Description"
            case deviceId = "DeviceId"
            case linkId = "LinkId"
            case tags = "Tags"
        }
    }

    public struct CreateConnectionResponse: AWSDecodableShape {
        /// Information about the connection.
        public let connection: Connection?

        public init(connection: Connection? = nil) {
            self.connection = connection
        }

        private enum CodingKeys: String, CodingKey {
            case connection = "Connection"
        }
    }

    public struct CreateDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// The AWS location of the device.
        public let aWSLocation: AWSLocation?
        /// A description of the device. Length Constraints: Maximum length of 256 characters.
        public let description: String?
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The location of the device.
        public let location: Location?
        /// The model of the device. Length Constraints: Maximum length of 128 characters.
        public let model: String?
        /// The serial number of the device. Length Constraints: Maximum length of 128 characters.
        public let serialNumber: String?
        /// The ID of the site.
        public let siteId: String?
        /// The tags to apply to the resource during creation.
        public let tags: [Tag]?
        /// The type of the device.
        public let type: String?
        /// The vendor of the device. Length Constraints: Maximum length of 128 characters.
        public let vendor: String?

        public init(aWSLocation: AWSLocation? = nil, description: String? = nil, globalNetworkId: String, location: Location? = nil, model: String? = nil, serialNumber: String? = nil, siteId: String? = nil, tags: [Tag]? = nil, type: String? = nil, vendor: String? = nil) {
            self.aWSLocation = aWSLocation
            self.description = description
            self.globalNetworkId = globalNetworkId
            self.location = location
            self.model = model
            self.serialNumber = serialNumber
            self.siteId = siteId
            self.tags = tags
            self.type = type
            self.vendor = vendor
        }

        private enum CodingKeys: String, CodingKey {
            case aWSLocation = "AWSLocation"
            case description = "Description"
            case location = "Location"
            case model = "Model"
            case serialNumber = "SerialNumber"
            case siteId = "SiteId"
            case tags = "Tags"
            case type = "Type"
            case vendor = "Vendor"
        }
    }

    public struct CreateDeviceResponse: AWSDecodableShape {
        /// Information about the device.
        public let device: Device?

        public init(device: Device? = nil) {
            self.device = device
        }

        private enum CodingKeys: String, CodingKey {
            case device = "Device"
        }
    }

    public struct CreateGlobalNetworkRequest: AWSEncodableShape {
        /// A description of the global network. Length Constraints: Maximum length of 256 characters.
        public let description: String?
        /// The tags to apply to the resource during creation.
        public let tags: [Tag]?

        public init(description: String? = nil, tags: [Tag]? = nil) {
            self.description = description
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case tags = "Tags"
        }
    }

    public struct CreateGlobalNetworkResponse: AWSDecodableShape {
        /// Information about the global network object.
        public let globalNetwork: GlobalNetwork?

        public init(globalNetwork: GlobalNetwork? = nil) {
            self.globalNetwork = globalNetwork
        }

        private enum CodingKeys: String, CodingKey {
            case globalNetwork = "GlobalNetwork"
        }
    }

    public struct CreateLinkRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        ///  The upload speed and download speed in Mbps.
        public let bandwidth: Bandwidth
        /// A description of the link. Length Constraints: Maximum length of 256 characters.
        public let description: String?
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The provider of the link. Constraints: Cannot include the following characters: | \ ^ Length Constraints: Maximum length of 128 characters.
        public let provider: String?
        /// The ID of the site.
        public let siteId: String
        /// The tags to apply to the resource during creation.
        public let tags: [Tag]?
        /// The type of the link. Constraints: Cannot include the following characters: | \ ^ Length Constraints: Maximum length of 128 characters.
        public let type: String?

        public init(bandwidth: Bandwidth, description: String? = nil, globalNetworkId: String, provider: String? = nil, siteId: String, tags: [Tag]? = nil, type: String? = nil) {
            self.bandwidth = bandwidth
            self.description = description
            self.globalNetworkId = globalNetworkId
            self.provider = provider
            self.siteId = siteId
            self.tags = tags
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case bandwidth = "Bandwidth"
            case description = "Description"
            case provider = "Provider"
            case siteId = "SiteId"
            case tags = "Tags"
            case type = "Type"
        }
    }

    public struct CreateLinkResponse: AWSDecodableShape {
        /// Information about the link.
        public let link: Link?

        public init(link: Link? = nil) {
            self.link = link
        }

        private enum CodingKeys: String, CodingKey {
            case link = "Link"
        }
    }

    public struct CreateSiteRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// A description of your site. Length Constraints: Maximum length of 256 characters.
        public let description: String?
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The site location. This information is used for visualization in the Network Manager console. If you specify the address, the latitude and longitude are automatically calculated.    Address: The physical address of the site.    Latitude: The latitude of the site.     Longitude: The longitude of the site.
        public let location: Location?
        /// The tags to apply to the resource during creation.
        public let tags: [Tag]?

        public init(description: String? = nil, globalNetworkId: String, location: Location? = nil, tags: [Tag]? = nil) {
            self.description = description
            self.globalNetworkId = globalNetworkId
            self.location = location
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case location = "Location"
            case tags = "Tags"
        }
    }

    public struct CreateSiteResponse: AWSDecodableShape {
        /// Information about the site.
        public let site: Site?

        public init(site: Site? = nil) {
            self.site = site
        }

        private enum CodingKeys: String, CodingKey {
            case site = "Site"
        }
    }

    public struct CustomerGatewayAssociation: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the customer gateway.
        public let customerGatewayArn: String?
        /// The ID of the device.
        public let deviceId: String?
        /// The ID of the global network.
        public let globalNetworkId: String?
        /// The ID of the link.
        public let linkId: String?
        /// The association state.
        public let state: CustomerGatewayAssociationState?

        public init(customerGatewayArn: String? = nil, deviceId: String? = nil, globalNetworkId: String? = nil, linkId: String? = nil, state: CustomerGatewayAssociationState? = nil) {
            self.customerGatewayArn = customerGatewayArn
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
            self.linkId = linkId
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case customerGatewayArn = "CustomerGatewayArn"
            case deviceId = "DeviceId"
            case globalNetworkId = "GlobalNetworkId"
            case linkId = "LinkId"
            case state = "State"
        }
    }

    public struct DeleteConnectionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "connectionId", location: .uri(locationName: "connectionId")),
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// The ID of the connection.
        public let connectionId: String
        /// The ID of the global network.
        public let globalNetworkId: String

        public init(connectionId: String, globalNetworkId: String) {
            self.connectionId = connectionId
            self.globalNetworkId = globalNetworkId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteConnectionResponse: AWSDecodableShape {
        /// Information about the connection.
        public let connection: Connection?

        public init(connection: Connection? = nil) {
            self.connection = connection
        }

        private enum CodingKeys: String, CodingKey {
            case connection = "Connection"
        }
    }

    public struct DeleteDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "deviceId", location: .uri(locationName: "deviceId")),
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// The ID of the device.
        public let deviceId: String
        /// The ID of the global network.
        public let globalNetworkId: String

        public init(deviceId: String, globalNetworkId: String) {
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteDeviceResponse: AWSDecodableShape {
        /// Information about the device.
        public let device: Device?

        public init(device: Device? = nil) {
            self.device = device
        }

        private enum CodingKeys: String, CodingKey {
            case device = "Device"
        }
    }

    public struct DeleteGlobalNetworkRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// The ID of the global network.
        public let globalNetworkId: String

        public init(globalNetworkId: String) {
            self.globalNetworkId = globalNetworkId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteGlobalNetworkResponse: AWSDecodableShape {
        /// Information about the global network.
        public let globalNetwork: GlobalNetwork?

        public init(globalNetwork: GlobalNetwork? = nil) {
            self.globalNetwork = globalNetwork
        }

        private enum CodingKeys: String, CodingKey {
            case globalNetwork = "GlobalNetwork"
        }
    }

    public struct DeleteLinkRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "linkId", location: .uri(locationName: "linkId"))
        ]

        /// The ID of the global network.
        public let globalNetworkId: String
        /// The ID of the link.
        public let linkId: String

        public init(globalNetworkId: String, linkId: String) {
            self.globalNetworkId = globalNetworkId
            self.linkId = linkId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteLinkResponse: AWSDecodableShape {
        /// Information about the link.
        public let link: Link?

        public init(link: Link? = nil) {
            self.link = link
        }

        private enum CodingKeys: String, CodingKey {
            case link = "Link"
        }
    }

    public struct DeleteSiteRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "siteId", location: .uri(locationName: "siteId"))
        ]

        /// The ID of the global network.
        public let globalNetworkId: String
        /// The ID of the site.
        public let siteId: String

        public init(globalNetworkId: String, siteId: String) {
            self.globalNetworkId = globalNetworkId
            self.siteId = siteId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteSiteResponse: AWSDecodableShape {
        /// Information about the site.
        public let site: Site?

        public init(site: Site? = nil) {
            self.site = site
        }

        private enum CodingKeys: String, CodingKey {
            case site = "Site"
        }
    }

    public struct DeregisterTransitGatewayRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "transitGatewayArn", location: .uri(locationName: "transitGatewayArn"))
        ]

        /// The ID of the global network.
        public let globalNetworkId: String
        /// The Amazon Resource Name (ARN) of the transit gateway.
        public let transitGatewayArn: String

        public init(globalNetworkId: String, transitGatewayArn: String) {
            self.globalNetworkId = globalNetworkId
            self.transitGatewayArn = transitGatewayArn
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeregisterTransitGatewayResponse: AWSDecodableShape {
        /// The transit gateway registration information.
        public let transitGatewayRegistration: TransitGatewayRegistration?

        public init(transitGatewayRegistration: TransitGatewayRegistration? = nil) {
            self.transitGatewayRegistration = transitGatewayRegistration
        }

        private enum CodingKeys: String, CodingKey {
            case transitGatewayRegistration = "TransitGatewayRegistration"
        }
    }

    public struct DescribeGlobalNetworksRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkIds", location: .querystring(locationName: "globalNetworkIds")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        /// The IDs of one or more global networks. The maximum is 10.
        public let globalNetworkIds: [String]?
        /// The maximum number of results to return.
        public let maxResults: Int?
        /// The token for the next page of results.
        public let nextToken: String?

        public init(globalNetworkIds: [String]? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.globalNetworkIds = globalNetworkIds
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 500)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeGlobalNetworksResponse: AWSDecodableShape {
        /// Information about the global networks.
        public let globalNetworks: [GlobalNetwork]?
        /// The token for the next page of results.
        public let nextToken: String?

        public init(globalNetworks: [GlobalNetwork]? = nil, nextToken: String? = nil) {
            self.globalNetworks = globalNetworks
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case globalNetworks = "GlobalNetworks"
            case nextToken = "NextToken"
        }
    }

    public struct Device: AWSDecodableShape {
        /// The AWS location of the device.
        public let aWSLocation: AWSLocation?
        /// The date and time that the site was created.
        public let createdAt: Date?
        /// The description of the device.
        public let description: String?
        /// The Amazon Resource Name (ARN) of the device.
        public let deviceArn: String?
        /// The ID of the device.
        public let deviceId: String?
        /// The ID of the global network.
        public let globalNetworkId: String?
        /// The site location.
        public let location: Location?
        /// The device model.
        public let model: String?
        /// The device serial number.
        public let serialNumber: String?
        /// The site ID.
        public let siteId: String?
        /// The device state.
        public let state: DeviceState?
        /// The tags for the device.
        public let tags: [Tag]?
        /// The device type.
        public let type: String?
        /// The device vendor.
        public let vendor: String?

        public init(aWSLocation: AWSLocation? = nil, createdAt: Date? = nil, description: String? = nil, deviceArn: String? = nil, deviceId: String? = nil, globalNetworkId: String? = nil, location: Location? = nil, model: String? = nil, serialNumber: String? = nil, siteId: String? = nil, state: DeviceState? = nil, tags: [Tag]? = nil, type: String? = nil, vendor: String? = nil) {
            self.aWSLocation = aWSLocation
            self.createdAt = createdAt
            self.description = description
            self.deviceArn = deviceArn
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
            self.location = location
            self.model = model
            self.serialNumber = serialNumber
            self.siteId = siteId
            self.state = state
            self.tags = tags
            self.type = type
            self.vendor = vendor
        }

        private enum CodingKeys: String, CodingKey {
            case aWSLocation = "AWSLocation"
            case createdAt = "CreatedAt"
            case description = "Description"
            case deviceArn = "DeviceArn"
            case deviceId = "DeviceId"
            case globalNetworkId = "GlobalNetworkId"
            case location = "Location"
            case model = "Model"
            case serialNumber = "SerialNumber"
            case siteId = "SiteId"
            case state = "State"
            case tags = "Tags"
            case type = "Type"
            case vendor = "Vendor"
        }
    }

    public struct DisassociateCustomerGatewayRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "customerGatewayArn", location: .uri(locationName: "customerGatewayArn")),
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// The Amazon Resource Name (ARN) of the customer gateway. For more information, see Resources Defined by Amazon EC2.
        public let customerGatewayArn: String
        /// The ID of the global network.
        public let globalNetworkId: String

        public init(customerGatewayArn: String, globalNetworkId: String) {
            self.customerGatewayArn = customerGatewayArn
            self.globalNetworkId = globalNetworkId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateCustomerGatewayResponse: AWSDecodableShape {
        /// Information about the customer gateway association.
        public let customerGatewayAssociation: CustomerGatewayAssociation?

        public init(customerGatewayAssociation: CustomerGatewayAssociation? = nil) {
            self.customerGatewayAssociation = customerGatewayAssociation
        }

        private enum CodingKeys: String, CodingKey {
            case customerGatewayAssociation = "CustomerGatewayAssociation"
        }
    }

    public struct DisassociateLinkRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "deviceId", location: .querystring(locationName: "deviceId")),
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "linkId", location: .querystring(locationName: "linkId"))
        ]

        /// The ID of the device.
        public let deviceId: String
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The ID of the link.
        public let linkId: String

        public init(deviceId: String, globalNetworkId: String, linkId: String) {
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
            self.linkId = linkId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateLinkResponse: AWSDecodableShape {
        /// Information about the link association.
        public let linkAssociation: LinkAssociation?

        public init(linkAssociation: LinkAssociation? = nil) {
            self.linkAssociation = linkAssociation
        }

        private enum CodingKeys: String, CodingKey {
            case linkAssociation = "LinkAssociation"
        }
    }

    public struct DisassociateTransitGatewayConnectPeerRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "transitGatewayConnectPeerArn", location: .uri(locationName: "transitGatewayConnectPeerArn"))
        ]

        /// The ID of the global network.
        public let globalNetworkId: String
        /// The Amazon Resource Name (ARN) of the transit gateway Connect peer.
        public let transitGatewayConnectPeerArn: String

        public init(globalNetworkId: String, transitGatewayConnectPeerArn: String) {
            self.globalNetworkId = globalNetworkId
            self.transitGatewayConnectPeerArn = transitGatewayConnectPeerArn
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateTransitGatewayConnectPeerResponse: AWSDecodableShape {
        /// The transit gateway Connect peer association.
        public let transitGatewayConnectPeerAssociation: TransitGatewayConnectPeerAssociation?

        public init(transitGatewayConnectPeerAssociation: TransitGatewayConnectPeerAssociation? = nil) {
            self.transitGatewayConnectPeerAssociation = transitGatewayConnectPeerAssociation
        }

        private enum CodingKeys: String, CodingKey {
            case transitGatewayConnectPeerAssociation = "TransitGatewayConnectPeerAssociation"
        }
    }

    public struct GetConnectionsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "connectionIds", location: .querystring(locationName: "connectionIds")),
            AWSMemberEncoding(label: "deviceId", location: .querystring(locationName: "deviceId")),
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        /// One or more connection IDs.
        public let connectionIds: [String]?
        /// The ID of the device.
        public let deviceId: String?
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The maximum number of results to return.
        public let maxResults: Int?
        /// The token for the next page of results.
        public let nextToken: String?

        public init(connectionIds: [String]? = nil, deviceId: String? = nil, globalNetworkId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.connectionIds = connectionIds
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 500)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetConnectionsResponse: AWSDecodableShape {
        /// Information about the connections.
        public let connections: [Connection]?
        /// The token to use for the next page of results.
        public let nextToken: String?

        public init(connections: [Connection]? = nil, nextToken: String? = nil) {
            self.connections = connections
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case connections = "Connections"
            case nextToken = "NextToken"
        }
    }

    public struct GetCustomerGatewayAssociationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "customerGatewayArns", location: .querystring(locationName: "customerGatewayArns")),
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        /// One or more customer gateway Amazon Resource Names (ARNs). For more information, see Resources Defined by Amazon EC2. The maximum is 10.
        public let customerGatewayArns: [String]?
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The maximum number of results to return.
        public let maxResults: Int?
        /// The token for the next page of results.
        public let nextToken: String?

        public init(customerGatewayArns: [String]? = nil, globalNetworkId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.customerGatewayArns = customerGatewayArns
            self.globalNetworkId = globalNetworkId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 500)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetCustomerGatewayAssociationsResponse: AWSDecodableShape {
        /// The customer gateway associations.
        public let customerGatewayAssociations: [CustomerGatewayAssociation]?
        /// The token for the next page of results.
        public let nextToken: String?

        public init(customerGatewayAssociations: [CustomerGatewayAssociation]? = nil, nextToken: String? = nil) {
            self.customerGatewayAssociations = customerGatewayAssociations
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case customerGatewayAssociations = "CustomerGatewayAssociations"
            case nextToken = "NextToken"
        }
    }

    public struct GetDevicesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "deviceIds", location: .querystring(locationName: "deviceIds")),
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken")),
            AWSMemberEncoding(label: "siteId", location: .querystring(locationName: "siteId"))
        ]

        /// One or more device IDs. The maximum is 10.
        public let deviceIds: [String]?
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The maximum number of results to return.
        public let maxResults: Int?
        /// The token for the next page of results.
        public let nextToken: String?
        /// The ID of the site.
        public let siteId: String?

        public init(deviceIds: [String]? = nil, globalNetworkId: String, maxResults: Int? = nil, nextToken: String? = nil, siteId: String? = nil) {
            self.deviceIds = deviceIds
            self.globalNetworkId = globalNetworkId
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.siteId = siteId
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 500)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetDevicesResponse: AWSDecodableShape {
        /// The devices.
        public let devices: [Device]?
        /// The token for the next page of results.
        public let nextToken: String?

        public init(devices: [Device]? = nil, nextToken: String? = nil) {
            self.devices = devices
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case devices = "Devices"
            case nextToken = "NextToken"
        }
    }

    public struct GetLinkAssociationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "deviceId", location: .querystring(locationName: "deviceId")),
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "linkId", location: .querystring(locationName: "linkId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        /// The ID of the device.
        public let deviceId: String?
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The ID of the link.
        public let linkId: String?
        /// The maximum number of results to return.
        public let maxResults: Int?
        /// The token for the next page of results.
        public let nextToken: String?

        public init(deviceId: String? = nil, globalNetworkId: String, linkId: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
            self.linkId = linkId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 500)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetLinkAssociationsResponse: AWSDecodableShape {
        /// The link associations.
        public let linkAssociations: [LinkAssociation]?
        /// The token for the next page of results.
        public let nextToken: String?

        public init(linkAssociations: [LinkAssociation]? = nil, nextToken: String? = nil) {
            self.linkAssociations = linkAssociations
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case linkAssociations = "LinkAssociations"
            case nextToken = "NextToken"
        }
    }

    public struct GetLinksRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "linkIds", location: .querystring(locationName: "linkIds")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken")),
            AWSMemberEncoding(label: "provider", location: .querystring(locationName: "provider")),
            AWSMemberEncoding(label: "siteId", location: .querystring(locationName: "siteId")),
            AWSMemberEncoding(label: "type", location: .querystring(locationName: "type"))
        ]

        /// The ID of the global network.
        public let globalNetworkId: String
        /// One or more link IDs. The maximum is 10.
        public let linkIds: [String]?
        /// The maximum number of results to return.
        public let maxResults: Int?
        /// The token for the next page of results.
        public let nextToken: String?
        /// The link provider.
        public let provider: String?
        /// The ID of the site.
        public let siteId: String?
        /// The link type.
        public let type: String?

        public init(globalNetworkId: String, linkIds: [String]? = nil, maxResults: Int? = nil, nextToken: String? = nil, provider: String? = nil, siteId: String? = nil, type: String? = nil) {
            self.globalNetworkId = globalNetworkId
            self.linkIds = linkIds
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.provider = provider
            self.siteId = siteId
            self.type = type
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 500)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetLinksResponse: AWSDecodableShape {
        /// The links.
        public let links: [Link]?
        /// The token for the next page of results.
        public let nextToken: String?

        public init(links: [Link]? = nil, nextToken: String? = nil) {
            self.links = links
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case links = "Links"
            case nextToken = "NextToken"
        }
    }

    public struct GetSitesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken")),
            AWSMemberEncoding(label: "siteIds", location: .querystring(locationName: "siteIds"))
        ]

        /// The ID of the global network.
        public let globalNetworkId: String
        /// The maximum number of results to return.
        public let maxResults: Int?
        /// The token for the next page of results.
        public let nextToken: String?
        /// One or more site IDs. The maximum is 10.
        public let siteIds: [String]?

        public init(globalNetworkId: String, maxResults: Int? = nil, nextToken: String? = nil, siteIds: [String]? = nil) {
            self.globalNetworkId = globalNetworkId
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.siteIds = siteIds
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 500)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSitesResponse: AWSDecodableShape {
        /// The token for the next page of results.
        public let nextToken: String?
        /// The sites.
        public let sites: [Site]?

        public init(nextToken: String? = nil, sites: [Site]? = nil) {
            self.nextToken = nextToken
            self.sites = sites
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case sites = "Sites"
        }
    }

    public struct GetTransitGatewayConnectPeerAssociationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken")),
            AWSMemberEncoding(label: "transitGatewayConnectPeerArns", location: .querystring(locationName: "transitGatewayConnectPeerArns"))
        ]

        /// The ID of the global network.
        public let globalNetworkId: String
        /// The maximum number of results to return.
        public let maxResults: Int?
        /// The token for the next page of results.
        public let nextToken: String?
        /// One or more transit gateway Connect peer Amazon Resource Names (ARNs).
        public let transitGatewayConnectPeerArns: [String]?

        public init(globalNetworkId: String, maxResults: Int? = nil, nextToken: String? = nil, transitGatewayConnectPeerArns: [String]? = nil) {
            self.globalNetworkId = globalNetworkId
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.transitGatewayConnectPeerArns = transitGatewayConnectPeerArns
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 500)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetTransitGatewayConnectPeerAssociationsResponse: AWSDecodableShape {
        /// The token to use for the next page of results.
        public let nextToken: String?
        /// Information about the transit gateway Connect peer associations.
        public let transitGatewayConnectPeerAssociations: [TransitGatewayConnectPeerAssociation]?

        public init(nextToken: String? = nil, transitGatewayConnectPeerAssociations: [TransitGatewayConnectPeerAssociation]? = nil) {
            self.nextToken = nextToken
            self.transitGatewayConnectPeerAssociations = transitGatewayConnectPeerAssociations
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case transitGatewayConnectPeerAssociations = "TransitGatewayConnectPeerAssociations"
        }
    }

    public struct GetTransitGatewayRegistrationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken")),
            AWSMemberEncoding(label: "transitGatewayArns", location: .querystring(locationName: "transitGatewayArns"))
        ]

        /// The ID of the global network.
        public let globalNetworkId: String
        /// The maximum number of results to return.
        public let maxResults: Int?
        /// The token for the next page of results.
        public let nextToken: String?
        /// The Amazon Resource Names (ARNs) of one or more transit gateways. The maximum is 10.
        public let transitGatewayArns: [String]?

        public init(globalNetworkId: String, maxResults: Int? = nil, nextToken: String? = nil, transitGatewayArns: [String]? = nil) {
            self.globalNetworkId = globalNetworkId
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.transitGatewayArns = transitGatewayArns
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 500)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetTransitGatewayRegistrationsResponse: AWSDecodableShape {
        /// The token for the next page of results.
        public let nextToken: String?
        /// The transit gateway registrations.
        public let transitGatewayRegistrations: [TransitGatewayRegistration]?

        public init(nextToken: String? = nil, transitGatewayRegistrations: [TransitGatewayRegistration]? = nil) {
            self.nextToken = nextToken
            self.transitGatewayRegistrations = transitGatewayRegistrations
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case transitGatewayRegistrations = "TransitGatewayRegistrations"
        }
    }

    public struct GlobalNetwork: AWSDecodableShape {
        /// The date and time that the global network was created.
        public let createdAt: Date?
        /// The description of the global network.
        public let description: String?
        /// The Amazon Resource Name (ARN) of the global network.
        public let globalNetworkArn: String?
        /// The ID of the global network.
        public let globalNetworkId: String?
        /// The state of the global network.
        public let state: GlobalNetworkState?
        /// The tags for the global network.
        public let tags: [Tag]?

        public init(createdAt: Date? = nil, description: String? = nil, globalNetworkArn: String? = nil, globalNetworkId: String? = nil, state: GlobalNetworkState? = nil, tags: [Tag]? = nil) {
            self.createdAt = createdAt
            self.description = description
            self.globalNetworkArn = globalNetworkArn
            self.globalNetworkId = globalNetworkId
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case createdAt = "CreatedAt"
            case description = "Description"
            case globalNetworkArn = "GlobalNetworkArn"
            case globalNetworkId = "GlobalNetworkId"
            case state = "State"
            case tags = "Tags"
        }
    }

    public struct Link: AWSDecodableShape {
        /// The bandwidth for the link.
        public let bandwidth: Bandwidth?
        /// The date and time that the link was created.
        public let createdAt: Date?
        /// The description of the link.
        public let description: String?
        /// The ID of the global network.
        public let globalNetworkId: String?
        /// The Amazon Resource Name (ARN) of the link.
        public let linkArn: String?
        /// The ID of the link.
        public let linkId: String?
        /// The provider of the link.
        public let provider: String?
        /// The ID of the site.
        public let siteId: String?
        /// The state of the link.
        public let state: LinkState?
        /// The tags for the link.
        public let tags: [Tag]?
        /// The type of the link.
        public let type: String?

        public init(bandwidth: Bandwidth? = nil, createdAt: Date? = nil, description: String? = nil, globalNetworkId: String? = nil, linkArn: String? = nil, linkId: String? = nil, provider: String? = nil, siteId: String? = nil, state: LinkState? = nil, tags: [Tag]? = nil, type: String? = nil) {
            self.bandwidth = bandwidth
            self.createdAt = createdAt
            self.description = description
            self.globalNetworkId = globalNetworkId
            self.linkArn = linkArn
            self.linkId = linkId
            self.provider = provider
            self.siteId = siteId
            self.state = state
            self.tags = tags
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case bandwidth = "Bandwidth"
            case createdAt = "CreatedAt"
            case description = "Description"
            case globalNetworkId = "GlobalNetworkId"
            case linkArn = "LinkArn"
            case linkId = "LinkId"
            case provider = "Provider"
            case siteId = "SiteId"
            case state = "State"
            case tags = "Tags"
            case type = "Type"
        }
    }

    public struct LinkAssociation: AWSDecodableShape {
        /// The device ID for the link association.
        public let deviceId: String?
        /// The ID of the global network.
        public let globalNetworkId: String?
        /// The state of the association.
        public let linkAssociationState: LinkAssociationState?
        /// The ID of the link.
        public let linkId: String?

        public init(deviceId: String? = nil, globalNetworkId: String? = nil, linkAssociationState: LinkAssociationState? = nil, linkId: String? = nil) {
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
            self.linkAssociationState = linkAssociationState
            self.linkId = linkId
        }

        private enum CodingKeys: String, CodingKey {
            case deviceId = "DeviceId"
            case globalNetworkId = "GlobalNetworkId"
            case linkAssociationState = "LinkAssociationState"
            case linkId = "LinkId"
        }
    }

    public struct ListTagsForResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resourceArn"))
        ]

        /// The Amazon Resource Name (ARN) of the resource.
        public let resourceArn: String

        public init(resourceArn: String) {
            self.resourceArn = resourceArn
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTagsForResourceResponse: AWSDecodableShape {
        /// The list of tags.
        public let tagList: [Tag]?

        public init(tagList: [Tag]? = nil) {
            self.tagList = tagList
        }

        private enum CodingKeys: String, CodingKey {
            case tagList = "TagList"
        }
    }

    public struct Location: AWSEncodableShape & AWSDecodableShape {
        /// The physical address.
        public let address: String?
        /// The latitude.
        public let latitude: String?
        /// The longitude.
        public let longitude: String?

        public init(address: String? = nil, latitude: String? = nil, longitude: String? = nil) {
            self.address = address
            self.latitude = latitude
            self.longitude = longitude
        }

        private enum CodingKeys: String, CodingKey {
            case address = "Address"
            case latitude = "Latitude"
            case longitude = "Longitude"
        }
    }

    public struct RegisterTransitGatewayRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// The ID of the global network.
        public let globalNetworkId: String
        /// The Amazon Resource Name (ARN) of the transit gateway. For more information, see Resources Defined by Amazon EC2.
        public let transitGatewayArn: String

        public init(globalNetworkId: String, transitGatewayArn: String) {
            self.globalNetworkId = globalNetworkId
            self.transitGatewayArn = transitGatewayArn
        }

        private enum CodingKeys: String, CodingKey {
            case transitGatewayArn = "TransitGatewayArn"
        }
    }

    public struct RegisterTransitGatewayResponse: AWSDecodableShape {
        /// Information about the transit gateway registration.
        public let transitGatewayRegistration: TransitGatewayRegistration?

        public init(transitGatewayRegistration: TransitGatewayRegistration? = nil) {
            self.transitGatewayRegistration = transitGatewayRegistration
        }

        private enum CodingKeys: String, CodingKey {
            case transitGatewayRegistration = "TransitGatewayRegistration"
        }
    }

    public struct Site: AWSDecodableShape {
        /// The date and time that the site was created.
        public let createdAt: Date?
        /// The description of the site.
        public let description: String?
        /// The ID of the global network.
        public let globalNetworkId: String?
        /// The location of the site.
        public let location: Location?
        /// The Amazon Resource Name (ARN) of the site.
        public let siteArn: String?
        /// The ID of the site.
        public let siteId: String?
        /// The state of the site.
        public let state: SiteState?
        /// The tags for the site.
        public let tags: [Tag]?

        public init(createdAt: Date? = nil, description: String? = nil, globalNetworkId: String? = nil, location: Location? = nil, siteArn: String? = nil, siteId: String? = nil, state: SiteState? = nil, tags: [Tag]? = nil) {
            self.createdAt = createdAt
            self.description = description
            self.globalNetworkId = globalNetworkId
            self.location = location
            self.siteArn = siteArn
            self.siteId = siteId
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case createdAt = "CreatedAt"
            case description = "Description"
            case globalNetworkId = "GlobalNetworkId"
            case location = "Location"
            case siteArn = "SiteArn"
            case siteId = "SiteId"
            case state = "State"
            case tags = "Tags"
        }
    }

    public struct Tag: AWSEncodableShape & AWSDecodableShape {
        /// The tag key. Length Constraints: Maximum length of 128 characters.
        public let key: String?
        /// The tag value. Length Constraints: Maximum length of 256 characters.
        public let value: String?

        public init(key: String? = nil, value: String? = nil) {
            self.key = key
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case key = "Key"
            case value = "Value"
        }
    }

    public struct TagResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resourceArn"))
        ]

        /// The Amazon Resource Name (ARN) of the resource.
        public let resourceArn: String
        /// The tags to apply to the specified resource.
        public let tags: [Tag]

        public init(resourceArn: String, tags: [Tag]) {
            self.resourceArn = resourceArn
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct TagResourceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct TransitGatewayConnectPeerAssociation: AWSDecodableShape {
        /// The ID of the device.
        public let deviceId: String?
        /// The ID of the global network.
        public let globalNetworkId: String?
        /// The ID of the link.
        public let linkId: String?
        /// The state of the association.
        public let state: TransitGatewayConnectPeerAssociationState?
        /// The Amazon Resource Name (ARN) of the transit gateway Connect peer.
        public let transitGatewayConnectPeerArn: String?

        public init(deviceId: String? = nil, globalNetworkId: String? = nil, linkId: String? = nil, state: TransitGatewayConnectPeerAssociationState? = nil, transitGatewayConnectPeerArn: String? = nil) {
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
            self.linkId = linkId
            self.state = state
            self.transitGatewayConnectPeerArn = transitGatewayConnectPeerArn
        }

        private enum CodingKeys: String, CodingKey {
            case deviceId = "DeviceId"
            case globalNetworkId = "GlobalNetworkId"
            case linkId = "LinkId"
            case state = "State"
            case transitGatewayConnectPeerArn = "TransitGatewayConnectPeerArn"
        }
    }

    public struct TransitGatewayRegistration: AWSDecodableShape {
        /// The ID of the global network.
        public let globalNetworkId: String?
        /// The state of the transit gateway registration.
        public let state: TransitGatewayRegistrationStateReason?
        /// The Amazon Resource Name (ARN) of the transit gateway.
        public let transitGatewayArn: String?

        public init(globalNetworkId: String? = nil, state: TransitGatewayRegistrationStateReason? = nil, transitGatewayArn: String? = nil) {
            self.globalNetworkId = globalNetworkId
            self.state = state
            self.transitGatewayArn = transitGatewayArn
        }

        private enum CodingKeys: String, CodingKey {
            case globalNetworkId = "GlobalNetworkId"
            case state = "State"
            case transitGatewayArn = "TransitGatewayArn"
        }
    }

    public struct TransitGatewayRegistrationStateReason: AWSDecodableShape {
        /// The code for the state reason.
        public let code: TransitGatewayRegistrationState?
        /// The message for the state reason.
        public let message: String?

        public init(code: TransitGatewayRegistrationState? = nil, message: String? = nil) {
            self.code = code
            self.message = message
        }

        private enum CodingKeys: String, CodingKey {
            case code = "Code"
            case message = "Message"
        }
    }

    public struct UntagResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resourceArn")),
            AWSMemberEncoding(label: "tagKeys", location: .querystring(locationName: "tagKeys"))
        ]

        /// The Amazon Resource Name (ARN) of the resource.
        public let resourceArn: String
        /// The tag keys to remove from the specified resource.
        public let tagKeys: [String]

        public init(resourceArn: String, tagKeys: [String]) {
            self.resourceArn = resourceArn
            self.tagKeys = tagKeys
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct UntagResourceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateConnectionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "connectionId", location: .uri(locationName: "connectionId")),
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// The ID of the link for the second device in the connection.
        public let connectedLinkId: String?
        /// The ID of the connection.
        public let connectionId: String
        /// A description of the connection. Length Constraints: Maximum length of 256 characters.
        public let description: String?
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The ID of the link for the first device in the connection.
        public let linkId: String?

        public init(connectedLinkId: String? = nil, connectionId: String, description: String? = nil, globalNetworkId: String, linkId: String? = nil) {
            self.connectedLinkId = connectedLinkId
            self.connectionId = connectionId
            self.description = description
            self.globalNetworkId = globalNetworkId
            self.linkId = linkId
        }

        private enum CodingKeys: String, CodingKey {
            case connectedLinkId = "ConnectedLinkId"
            case description = "Description"
            case linkId = "LinkId"
        }
    }

    public struct UpdateConnectionResponse: AWSDecodableShape {
        /// Information about the connection.
        public let connection: Connection?

        public init(connection: Connection? = nil) {
            self.connection = connection
        }

        private enum CodingKeys: String, CodingKey {
            case connection = "Connection"
        }
    }

    public struct UpdateDeviceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "deviceId", location: .uri(locationName: "deviceId")),
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// The AWS location of the device.
        public let aWSLocation: AWSLocation?
        /// A description of the device. Length Constraints: Maximum length of 256 characters.
        public let description: String?
        /// The ID of the device.
        public let deviceId: String
        /// The ID of the global network.
        public let globalNetworkId: String
        public let location: Location?
        /// The model of the device. Length Constraints: Maximum length of 128 characters.
        public let model: String?
        /// The serial number of the device. Length Constraints: Maximum length of 128 characters.
        public let serialNumber: String?
        /// The ID of the site.
        public let siteId: String?
        /// The type of the device.
        public let type: String?
        /// The vendor of the device. Length Constraints: Maximum length of 128 characters.
        public let vendor: String?

        public init(aWSLocation: AWSLocation? = nil, description: String? = nil, deviceId: String, globalNetworkId: String, location: Location? = nil, model: String? = nil, serialNumber: String? = nil, siteId: String? = nil, type: String? = nil, vendor: String? = nil) {
            self.aWSLocation = aWSLocation
            self.description = description
            self.deviceId = deviceId
            self.globalNetworkId = globalNetworkId
            self.location = location
            self.model = model
            self.serialNumber = serialNumber
            self.siteId = siteId
            self.type = type
            self.vendor = vendor
        }

        private enum CodingKeys: String, CodingKey {
            case aWSLocation = "AWSLocation"
            case description = "Description"
            case location = "Location"
            case model = "Model"
            case serialNumber = "SerialNumber"
            case siteId = "SiteId"
            case type = "Type"
            case vendor = "Vendor"
        }
    }

    public struct UpdateDeviceResponse: AWSDecodableShape {
        /// Information about the device.
        public let device: Device?

        public init(device: Device? = nil) {
            self.device = device
        }

        private enum CodingKeys: String, CodingKey {
            case device = "Device"
        }
    }

    public struct UpdateGlobalNetworkRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId"))
        ]

        /// A description of the global network. Length Constraints: Maximum length of 256 characters.
        public let description: String?
        /// The ID of your global network.
        public let globalNetworkId: String

        public init(description: String? = nil, globalNetworkId: String) {
            self.description = description
            self.globalNetworkId = globalNetworkId
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
        }
    }

    public struct UpdateGlobalNetworkResponse: AWSDecodableShape {
        /// Information about the global network object.
        public let globalNetwork: GlobalNetwork?

        public init(globalNetwork: GlobalNetwork? = nil) {
            self.globalNetwork = globalNetwork
        }

        private enum CodingKeys: String, CodingKey {
            case globalNetwork = "GlobalNetwork"
        }
    }

    public struct UpdateLinkRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "linkId", location: .uri(locationName: "linkId"))
        ]

        /// The upload and download speed in Mbps.
        public let bandwidth: Bandwidth?
        /// A description of the link. Length Constraints: Maximum length of 256 characters.
        public let description: String?
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The ID of the link.
        public let linkId: String
        /// The provider of the link. Length Constraints: Maximum length of 128 characters.
        public let provider: String?
        /// The type of the link. Length Constraints: Maximum length of 128 characters.
        public let type: String?

        public init(bandwidth: Bandwidth? = nil, description: String? = nil, globalNetworkId: String, linkId: String, provider: String? = nil, type: String? = nil) {
            self.bandwidth = bandwidth
            self.description = description
            self.globalNetworkId = globalNetworkId
            self.linkId = linkId
            self.provider = provider
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case bandwidth = "Bandwidth"
            case description = "Description"
            case provider = "Provider"
            case type = "Type"
        }
    }

    public struct UpdateLinkResponse: AWSDecodableShape {
        /// Information about the link.
        public let link: Link?

        public init(link: Link? = nil) {
            self.link = link
        }

        private enum CodingKeys: String, CodingKey {
            case link = "Link"
        }
    }

    public struct UpdateSiteRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "globalNetworkId", location: .uri(locationName: "globalNetworkId")),
            AWSMemberEncoding(label: "siteId", location: .uri(locationName: "siteId"))
        ]

        /// A description of your site. Length Constraints: Maximum length of 256 characters.
        public let description: String?
        /// The ID of the global network.
        public let globalNetworkId: String
        /// The site location:    Address: The physical address of the site.    Latitude: The latitude of the site.     Longitude: The longitude of the site.
        public let location: Location?
        /// The ID of your site.
        public let siteId: String

        public init(description: String? = nil, globalNetworkId: String, location: Location? = nil, siteId: String) {
            self.description = description
            self.globalNetworkId = globalNetworkId
            self.location = location
            self.siteId = siteId
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case location = "Location"
        }
    }

    public struct UpdateSiteResponse: AWSDecodableShape {
        /// Information about the site.
        public let site: Site?

        public init(site: Site? = nil) {
            self.site = site
        }

        private enum CodingKeys: String, CodingKey {
            case site = "Site"
        }
    }
}
